-- lua/lingma/init.lua
-- 插件主入口

local core = require("lingma.core")
local ui = require("lingma.ui")

local M = {}

--- 设置插件选项
function M.setup(opts)
  opts = opts or {}
  core.api_key = opts.api_key
  core.model = opts.model or core.model
  vim.notify("通义灵码插件已加载", vim.log.levels.INFO)
end

--- 提示词模板，支持功能：
--- 1. 代码补全
--- 2. 根据注释生成代码
--- 3. 为代码生成注释
local templates = {
  auto_comp = "你是一个%s编程助手，请补全以下%s代码，只返回代码，不要解释，不要格式控制。",
  auto_code = "你是一个%s编程助手，请根据以下注释实现%s代码，只返回代码，不要解释。",
  auto_comment = "你是一个编程助手，请为以下代码生成中文注释，保持原有代码结构，不要修改代码逻辑。",
}

--- 请求代码补全
function M.complete(mode)
  local line = vim.fn.getline(".")
  local filetype = vim.bo.filetype
  
  local temp_key = mode == "code" and "auto_code" or "auto_comp"
  local template = templates[temp_key]
  if not template then
    vim.notify("无效的模式: " .. tostring(mode), vim.log.levels.ERROR)
    return
  end
  template = string.format(template, filetype, filetype)
  
  local messages = {
    {
      role = "system",
      content = template,
    },
    {
      role = "user",
      content = line,
    }
  }

  core.request_completion(messages, function(result, err)
    if err then
      vim.notify("补全失败: " .. err, vim.log.levels.ERROR)
    else
      ui.show_preview(result)
    end
  end)
end

--- 为选中代码生成注释
function M.add_comment()
  local lines = vim.fn.getline("'<", "'>")
  local code = table.concat(lines, "\n")
  local template = templates.auto_comment
  local messages = {
    {
      role = "system",
      content = template,
    },
    {
      role = "user",
      content = code,
    }
  }

  core.request_completion(messages, function(result, err)
    if err then
      vim.notify("❌ 注释生成失败: " .. err, vim.log.levels.ERROR)
    else
      ui.show_preview(result)
    end
  end)
end

return M
